using System;
using System.Collections.ObjectModel;
using System.Text;
using System.Configuration.Provider;

namespace Systepic.Projects
{
	/// <summary>
	/// The base class to program to specifying
	/// all of the methods this project library
	/// supports. This is the class used by business
	/// layers.
	/// </summary>
	public abstract class ProjectsProvider : ProviderBase
	{
		/// <summary>
		/// The application pool this library is 
		/// connecting with.
		/// </summary>
		public abstract string ApplicationName
		{
			get;
			set;
		}

		public abstract Project CreateProject(Project project, out CreateProjectStatus status);
		public abstract bool UpdateProject(Project project);
		public abstract bool DeleteProject(Project project);
		public abstract Collection<Project> GetAllProjects();
		public abstract Collection<ProjectsUser> GetUsers();
		public abstract Collection<Project> GetProjectsForUser(string username);
		public abstract Collection<ProjectsUser> GetUsersInRole(ProjectUserRole role);
		public abstract Project GetProjectById(int projectId);
	}
}
